load("@bazel_gazelle//:def.bzl", "gazelle")
load("@com_github_atlassian_bazel_tools//gometalinter:def.bzl", "gometalinter")
load("@com_github_atlassian_bazel_tools//goimports:def.bzl", "goimports")
load("@io_kubernetes_build//defs:run_in_workspace.bzl", "workspace_binary")
load("@io_bazel_rules_go//go:def.bzl", "nogo")
load("@graknlabs_bazel_distribution//common:rules.bzl", "assemble_targz", "assemble_versioned")
load("@bazel_skylib//rules:common_settings.bzl", "string_setting")

prefix = "github.com/prysmaticlabs/prysm"

exports_files([
    "LICENSE.md",
])

# gazelle:prefix github.com/prysmaticlabs/prysm
# gazelle:map_kind go_library go_library @prysm//tools/go:def.bzl
# gazelle:map_kind go_repository go_repository @prysm//tools/go:def.bzl
gazelle(
    name = "gazelle",
    prefix = prefix,
)

# Protobuf compiler (non-gRPC)
alias(
    name = "proto_compiler",
    actual = "@io_bazel_rules_go//proto:gogofast_proto",
    visibility = [
        "//proto:__subpackages__",
    ],
)

# Protobuf compiler (gRPC)
alias(
    name = "grpc_proto_compiler",
    actual = "@io_bazel_rules_go//proto:gogofast_grpc",
    visibility = ["//visibility:public"],
)

# Protobuf gRPC compiler without gogoproto. Required for gRPC gateway.
alias(
    name = "grpc_nogogo_proto_compiler",
    actual = "@io_bazel_rules_go//proto:go_grpc",
    visibility = ["//visibility:public"],
)

# Protobuf gRPC gateway compiler
alias(
    name = "grpc_gateway_proto_compiler",
    actual = "@com_github_grpc_ecosystem_grpc_gateway//protoc-gen-grpc-gateway:go_gen_grpc_gateway",
    visibility = ["//visibility:public"],
)

gometalinter(
    name = "gometalinter",
    config = "//:.gometalinter.json",
    paths = [
        "./...",
    ],
    prefix = prefix,
)

goimports(
    name = "goimports",
    display_diffs = True,
    prefix = prefix,
    write = False,
)

workspace_binary(
    name = "golint",
    cmd = "@com_github_golang_lint//golint",
)

nogo(
    name = "nogo",
    config = "nogo_config.json",
    visibility = ["//visibility:public"],
    deps = [
        "@org_golang_x_tools//go/analysis/passes/unsafeptr:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/unreachable:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/unmarshal:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/tests:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/structtag:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/stdmethods:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/shift:go_tool_library",
        # "@org_golang_x_tools//go/analysis/passes/shadow:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/printf:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/pkgfact:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/nilness:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/nilfunc:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/loopclosure:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/httpresponse:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/findcall:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/deepequalerrors:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/ctrlflow:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/copylock:go_tool_library",
        #  "@org_golang_x_tools//go/analysis/passes/cgocall:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/buildtag:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/buildssa:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/bools:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/atomicalign:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/atomic:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/assign:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/inspect:go_tool_library",
        "@org_golang_x_tools//go/analysis/passes/asmdecl:go_tool_library",
        "//tools/analyzers/maligned:go_tool_library",
        "//tools/analyzers/cryptorand:go_tool_library",
        "//tools/analyzers/errcheck:go_tool_library",
        "//tools/analyzers/featureconfig:go_tool_library",
        "//tools/analyzers/comparesame:go_tool_library",
        "//tools/analyzers/shadowpredecl:go_tool_library",
        "//tools/analyzers/nop:go_tool_library",
        "//tools/analyzers/slicedirect:go_tool_library",
        "//tools/analyzers/ineffassign:go_tool_library",
        "//tools/analyzers/properpermissions:go_tool_library",
    ] + select({
        # nogo checks that fail with coverage enabled.
        ":coverage_enabled": [],
        "//conditions:default": [
            "@org_golang_x_tools//go/analysis/passes/lostcancel:go_tool_library",
            "@org_golang_x_tools//go/analysis/passes/composite:go_tool_library",
        ],
    }),
)

config_setting(
    name = "coverage_enabled",
    values = {"define": "coverage_enabled=1"},
)

common_files = {
    "//:LICENSE.md": "LICENSE.md",
    "//:README.md": "README.md",
}

toolchain(
    name = "built_cmake_toolchain",
    toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_cmake",
    toolchain_type = "@rules_foreign_cc//tools/build_defs:cmake_toolchain",
)

string_setting(
    name = "gotags",
    build_setting_default = "",
    values = [
        "",
        "libfuzzer",
    ],
)
